import { axios } from '@/utils/request'
import { METHOD } from '@/store/mutation-types'
import { DOWNLOAD } from './api'
import { toBase64, downloadFile as downloadFile_ } from '@/utils/util'
import Vue from 'vue'
/**
 * 系统通用校验重复方法
 * @param {*} param {tableName}/{column}/{key}
 * @param {*} config axios通用配置
 * @returns
 */
export function duplicateCheck(param, config) {
  return axios({
    url: `/common/duplicate/${param.tableName}/${param.column}/${param.key}`,
    method: METHOD.GET,
    params: { exclude: param.exclude },
    ...config
  })
}

/**
 * 请求文件 用于列表导出等非文件管理下载
 * @param url
 * @param parameter
 * @returns {*}
 */
export function downFile(url, parameter, config) {
  return axios({
    url: url,
    params: parameter,
    method: 'get',
    responseType: 'blob',
    ...config,
    _message: false
    // _allResponse: true // 返回包含响应头内的全部数据
  })
}

/**
 * 文件管理 用于文件下载,默认系统下载接口
 * @param fileNo
 * @param parameter
 * @returns {*}
 */
export function downFileByFileNo(fileNo, parameter, config) {
  return axios({
    url: DOWNLOAD + fileNo,
    params: parameter,
    method: 'get',
    responseType: 'blob',
    timeout: 60000,
    ...config,
    _message: false
  })
}

/**
 * 文件管理删除
 * @param {*} fileNo
 * @param {*} config
 * @returns
 */
export function removeFile(fileNo, config) {
  return axios({
    url: '/file/remove/' + fileNo,
    method: METHOD.DELETE,
    ...config
  })
}

/**
 * 下载文件
 * @param fileNo 文件id
 * @param fileName 文件名
 * @param parameter
 * @returns {*}
 */
export function downloadFile(fileNo, fileName, parameter, config) {
  const closeMessage = Vue.prototype.$message.loading('下载中..', 600)
  return downFileByFileNo(fileNo, parameter, Object.assign({}, config, { _allResponse: true })).then((res) => {
    const { data, headers } = res
    if (!data || data.size === 0) {
      Vue.prototype['$message'].warning('文件下载失败')
      return
    }
    if (fileName) {
      downloadFile_(data, fileName)
    } else {
      var fileName_ = decodeURIComponent(headers['content-disposition'].split(';')[1].split('filename=')[1])
      downloadFile_(data, fileName_.slice(1, fileName_.length - 1))
    }
  }).finally(() => {
    closeMessage()
  })
}

/**
 * 获取Base64图片
 * @param fileNo 文件id
 * @param parameter
 * @returns {*}
 */
export function getImgByFileNo(fileNo, parameter, config) {
  return downFileByFileNo(fileNo, parameter, config).then((data) => {
    if (!data) {
      return ''
    }
    return toBase64(data)
  })
}
